package com.palfund.glide;

import android.content.Context;

import com.bumptech.glide.GlideBuilder;
import com.bumptech.glide.annotation.GlideModule;
import com.bumptech.glide.load.DecodeFormat;
import com.bumptech.glide.load.engine.cache.InternalCacheDiskCacheFactory;
import com.bumptech.glide.module.AppGlideModule;

/**
 * Created by clvc on 2017/8/28.
 * 真正的速度是看不见的 !
 * Today is today , we will go !
 */
/*
* 一般情况下，开发者是不需要自己去指定它们的大小的，因为Glide已经帮我们做好了。默认的内存缓存和BitmapPool的大小由MemorySizeCalculator
* 根据当前设备的屏幕大小和可用内存计算得到。同时Glide还支持动态的缓存大小调整，在存在大量图片的Activity/Fragment中，开发者可以通过setMemoryCategory
* 方法来提高Glide的内存缓存大小，从而加快图片的加载速度。
* Glide.get(context).setMemoryCategory(MemoryCategory.HIGH);
* MemoryCategory有3个值可供选择：
* MemoryCategory.HIGH（初始缓存大小的1.5倍）
* MemoryCategory.NORMAL（初始缓存大小的1倍）
* MemoryCategory.LOW（初始缓存大小的0.5倍）
*
* */
@GlideModule
public class GlideAppModule extends AppGlideModule {
    @Override
    public void applyOptions(Context context, GlideBuilder builder) {
        // 修改图片质量,Glide 默认使用低质量的 RGB565
        //builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);
        //获取系统分配给应用的总内存大小
        //int maxMemory = (int) Runtime.getRuntime().maxMemory();
        //设置图片内存缓存占用八分之一
        //int memoryCacheSize = maxMemory / 8;
        //设置内存缓存大小
        //builder.setMemoryCache(new LruResourceCache(memoryCacheSize));
        //builder.setBitmapPool(new LruBitmapPool(memoryCacheSize));
        // 磁盘缓存100MB
        int diskCacheSizeBytes = 1024 * 1024 * 100;
        //builder.setDiskCache(new InternalCacheDiskCacheFactory(context, diskCacheSizeBytes));
        // 内部私有cache目录
        builder.setDiskCache(new InternalCacheDiskCacheFactory(context, "glideCache",
                diskCacheSizeBytes));
        // 外部私有cache目录
        //builder.setDiskCache(new ExternalCacheDiskCacheFactory(context, "glideCache",
        // diskCacheSizeBytes));
        //设置图片解码格式
        builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);
    }

    // 禁止解析Manifest文件
    @Override
    public boolean isManifestParsingEnabled() {
        return false;
    }
}
